home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / tango2.lha / SOURCES / RAY1.s < prev    next >
Text File  |  1988-07-19  |  18KB  |  932 lines

  1. ; ****************************************
  2. ; ** INTRO NUMBER 5 (C) 1990 CRYPTIC UK **
  3. ; ** CODED BY: TANGO                    **
  4. ; ** MUSIC BY: COUNT                    **
  5. ; ****************************************
  6.  
  7.     opt c-
  8.     section blitter,code_c            Chip Ram please !!
  9.     include    df1:definitions            Give me some hardware reggies
  10.     include    df1:macros                Give me some macros
  11.     
  12.         
  13. ;LOCAL CONSTANTS
  14.  
  15. icra        equ $bfed01                
  16. allocmem     =-30-168                
  17. freemem     =-30-180                
  18. fontmemory    =4000
  19.  
  20.  
  21. TAKEOVER:
  22.         
  23.     LEA custom,a5        
  24.     LEA GFXLIB(PC),a1             Point to 'graphics.library'
  25.     MOVEQ #0,D0                     Doesn't matter which version
  26.      MOVE.L 4.w,a6                 EXECBASE
  27.     jsr    -132(a6)                 task switching off (forbid)
  28.      JSR -$228(a6)                  Openlibrary
  29.      MOVE.L D0,GFXBASE             Store library address
  30.     jsr        cyb_init
  31.     
  32.         
  33. ;Now put the graphic addresses in the CopperList         
  34.  
  35.      move.l    screenx,d1            Bitplane memory address
  36.     move.w    d1,bp1lo+2            for scroll 1.
  37.      swap    d1
  38.      move.w    d1,bp1hi+2
  39.  
  40.      move.l    screenx,d1            Bitplane memory address
  41.     ADD.L    #6000,D1
  42.     move.w    d1,bp3lo+2            for scroll 1.
  43.      swap    d1
  44.      move.w    d1,bp3hi+2
  45.  
  46.      move.l    screenx,d1            Bitplane memory address
  47.     ADD.L    #6000*2,D1
  48.     move.w    d1,bp5lo+2            for scroll 1.
  49.      swap    d1
  50.      move.w    d1,bp5hi+2
  51.  
  52.      move.l    screeny,d1            Bitplane memory address
  53.     move.w    d1,abp1lo+2            for scroll 2.
  54.      swap    d1
  55.      move.w    d1,abp1hi+2
  56.  
  57.     move.l    screeny,d1            Bitplane memory address
  58.     ADD.L    #10000,D1
  59.     move.w    d1,abp3lo+2            for scroll 2.
  60.      swap    d1
  61.      move.w    d1,abp3hi+2
  62.  
  63.     move.l    screeny,d1            Bitplane memory address
  64.     ADD.L    #10000*2,D1
  65.     move.w    d1,abp5lo+2            for scroll 2.
  66.      swap    d1
  67.      move.w    d1,abp5hi+2
  68.  
  69.  
  70. ; ** SET UP EVEN BITPLANES 2,4,6 **
  71.  
  72.     MOVE.L    #PLAY2,D1
  73.     MOVE.W    D1,BP2LO+2
  74.     SWAP    D1
  75.     MOVE.W    D1,BP2HI+2
  76.     
  77.     MOVE.L    #PLAY2,D1
  78.     ADD.L    #10240,D1
  79.     MOVE.W    D1,BP4LO+2
  80.     SWAP    D1
  81.     MOVE.W    D1,BP4HI+2
  82.     
  83.     MOVE.L    #PLAY2,D1
  84.     ADD.L    #10240*2,D1
  85.     MOVE.W    D1,BP6LO+2
  86.     SWAP    D1
  87.     MOVE.W    D1,BP6HI+2
  88.     
  89.      move.l GFXBASE,d0            Move gfxbase offset to d0
  90.      MOVE.L D0,A6                
  91.      MOVE.W #$80,dmacon(a5)        Turn off copper whilst changing it
  92.      MOVE.L $32(A6),WBCOPPER         Store old (WBench) copper address
  93.      MOVE.L #OURCOPPER,$32(A6)    Point to new copper list (our own)
  94.      MOVE.W #$8080,dmacon(a5)    Re-enable copper
  95.      MOVE.W #$8010,intena(a5)        
  96.      MOVE.L $6c,old                Save work bench interrupt
  97.      MOVE.L #LEV3,$6c            Point to were to set up interrupt
  98.     move.w    intenar(a5),systemints
  99.     move.b    #%01111111,icra        Kill keyboard.
  100.         
  101. WAIT:     
  102.     BTST #6,$BFE001                This waits for the left
  103.      BNE.S    WAIT                mouse button to be pressed
  104.     move.l    4.w,a6                EXECBASE
  105.      MOVE.L old,$6c                Restore system interrupts
  106.     MOVE.L GFXBASE,A6
  107.      MOVE.W #$80,dmacon(a5)        Disable DMA
  108.      MOVE.L WBCOPPER,$32(A6)        Restore old copperlist
  109.      MOVE.W #$8080,dmacon(a5)    Enable DMA
  110.      move.w    systemints,d0        Systems interrupt
  111.      or.w    #$c000,d0
  112.      move.w    d0,intena(a5)        Enable OS interrupts
  113.      move.b    #%10011011,icra        Enable keyboard
  114.     clr.w    $dff0a8                Clear music
  115.     clr.w    $dff0b8
  116.     clr.w    $dff0c8
  117.     clr.w    $dff0d8
  118.     move.w    #$f,$dff096
  119.     rts
  120.  
  121.  
  122. ERROR:    
  123.     move.l 4.w,a6                Get EXECBASE
  124.     jsr    -138(a6)                Permit ( multi-tasking on )
  125.     moveq    #0,d0                Clear d0
  126.      RTS                            Return to AmigaDOS
  127.  
  128.  
  129. ;This is the NEW level 3 interrupt
  130.  
  131. LEV3:
  132.      Save_all                    Save all registers to the stack
  133.     lea    custom,a5
  134.     AND #$10,intreqr(a5)           Check if interrupt is from Copper 
  135.     BNE out
  136.     move.w    #$8010,$9c            Cause Copper interrupt                                
  137.  
  138. ; ** Main Routines called every VBI **
  139.     
  140.     bsr    testscroll
  141.     bsr    bounce
  142.     bsr    testscroll2
  143.     bsr    bounce2
  144.     bsr    cyb_music
  145.             
  146. out:     
  147.     Return_all
  148.     DC.W $4ef9                    hex value for  JMP instruction
  149. old:     
  150.     DC.L 0                        will jump to normal interrupt
  151.  
  152.  
  153. ; ** THE SCROLL ROUTINE **
  154.  
  155. testscroll:
  156.     tst.l    stopper
  157.     beq.s    scroll
  158.     sub.l    #1,stopper
  159.     rts
  160. scroll:
  161.     cmp.l    #15,val                    Blitshifted all <<<
  162.     blo.s    coarse_scroll_it        No then get doing it !!
  163.     bsr        blit_char                Blit letter to screen
  164.     clr.l    val                        Reset index
  165. coarse_scroll_it:
  166.     bsr        coarse                    Scroll all line
  167.     rts                            
  168.  
  169. testscroll2:
  170.     tst.l    stopper2                Test for pause.
  171.     beq.s    scroll2
  172.     sub.l    #1,stopper2
  173.     rts
  174. scroll2:
  175.     cmp.l    #15,val2                Blitshifted all <<<
  176.     blo.s    coarse_scroll_it2        No then get doing it blitter man !!
  177.     bsr        blit_char2                Blit letter to screen
  178.     clr.l    val2                    Reset index
  179. coarse_scroll_it2:
  180.     bsr        coarse2                    Scroll all line
  181.     rts                            
  182.  
  183.     
  184. ; ** BLIT LETTER ON THE SCREEN **
  185.  
  186. blit_char
  187.     jsr        text
  188.     lea        custom,a5                Get custom chip address
  189.     move.l    screenx,a0                 The screen on which scrolly is.
  190.     move.l    #font,a1                 Put font in blitter source
  191.     add.l    d1,a1
  192.     MOVE.L    #2,D2
  193. blit_test:
  194.     btst    #14,$dff002                 Blitter busy !!!
  195.     bne    blit_test                     Lets wait till she finishes !
  196.     move.w    #$ffff,bltafwm(a5)        Mask 
  197.     move.w    #$ffff,bltalwm(a5)        Mask 
  198.     move.l    a0,bltdpth(a5)             Blitter dest D (BOTTOM OF SCREEN)
  199.     move.l    a1,bltapth(a5)             Blitter source A (SCROLLING FONT)
  200.     move.w    #38,bltamod(a5)             Modulo (20-1)*2
  201.     move.w    #38,bltdmod(a5)             Modulo (20-1)*2
  202.     move.w    #$9f0,bltcon0(a5)         Minterms D=A
  203.     clr.w    bltcon1(a5)                 Set Ascending mode
  204.      move.w    #16*64+1,bltsize(a5)     Blit size (SIZE OF FONT)
  205.     ADD.L    #6000,A0
  206.     ADD.L    #40*50,A1
  207.     DBF        D2,BLIT_TEST
  208.     rts                                  Return
  209.  
  210.  
  211. ; ** BLITSHIFT THE ENTIRE SCROLL LINE **
  212. ;
  213. ;     FUNCTION: TO BARREL SHIFT THE ENTIRE SCROLLING MESSAGE.
  214.  
  215. coarse:
  216.     lea        custom,a5                 
  217.     move.l    screenx,a0                
  218.     move.l    a0,a1
  219.     add.l    #2,a1
  220.     move.l    #2,d3
  221.     move    speed,d2                
  222.     incl    #4,val                    
  223.     ror        #4,d2                    ; Set to correct bits (12-15)
  224.     or.w    #$09f0,d2
  225. blit_wait:
  226.     btst    #14,$dff002            
  227.     bne        blit_wait
  228.     move.l    #-1,bltafwm(a5)
  229.     move.l    a1,bltapth(a5)
  230.     move.l    a0,bltdpth(a5)
  231.     move.w    #0,bltamod(a5)
  232.     move.w    #0,bltdmod(a5)
  233.     move.w    d2,bltcon0(a5)    
  234.     move.w    #20*64+20,bltsize(a5)
  235.     add.l    #6000,a0
  236.     add.l    #6000,a1
  237.     sub.l    #1,d3
  238.     bne.s    blit_wait
  239.     rts    
  240.  
  241. speed:    dc.w    12
  242.  
  243.  
  244. ; ** SCROLL NUMBER TWO **
  245. ;
  246. ; DOCUMENTED IN SCROLL NUMBER ONE.
  247.  
  248. blit_char2:
  249.     jsr        text2
  250.     lea        custom,a5                
  251.     move.l    screeny,a0                 
  252.     move.l    #font,a1                 
  253.     add.l    d1,a1
  254.     MOVE.L    #2,D6
  255. blit_test2:
  256.     btst    #14,$dff002                 
  257.     bne    blit_test2                     
  258.     move.w    #$ffff,bltafwm(a5)        
  259.     move.w    #$ffff,bltalwm(a5)        
  260.     move.l    a0,bltdpth(a5)             
  261.     move.l    a1,bltapth(a5)             
  262.     move.w    #38,bltamod(a5)             
  263.     move.w    #38,bltdmod(a5)             
  264.     move.w    #$9f0,bltcon0(a5)         
  265.     clr.w    bltcon1(a5)                 
  266.      move.w    #16*64+1,bltsize(a5)     
  267.     ADD.L    #10000,A0
  268.     ADD.L    #40*50,A1
  269.     DBF        D6,BLIT_TEST2
  270.     rts                                  
  271.  
  272. coarse2:
  273.     lea        custom,a5                 
  274.     move.l    screeny,a0                
  275.     move.l    a0,a1
  276.     add.l    #2,a1
  277.     move.l    #2,d4
  278.     incl    #4,val2                    
  279.     move    speed2,d7                
  280.     ror        #4,d7                    
  281.     or        #%100111110000,d7        
  282. blit_wait2:
  283.     btst    #14,$dff002            
  284.     bne        blit_wait2
  285.     move.l    #-1,bltafwm(a5)
  286.     move.l    a1,bltapth(a5)
  287.     move.l    a0,bltdpth(a5)
  288.     move.w    #0,bltamod(a5)
  289.     move.w    #0,bltdmod(a5)
  290.     move.w    d7,bltcon0(a5)    
  291.     move.w    #20*64+20,bltsize(a5)
  292.     add.l    #10000,a0
  293.     add.l    #10000,a1
  294.     dbf        d4,blit_wait2
  295.     rts
  296.     
  297. speed2:    dc.w    12
  298.  
  299.  
  300. ; ** THIS CRAPPY CODE BOUNCES THE SCROLLY MESSAGE NUMBER TWO **
  301. ;
  302. ;     ENTRYS  : YCORD-HOW FAR UP AND DOWN SCREEN TO GO.
  303. ;             : DELTAY-WAIT COMMAND IN COPPERLIST.
  304. ;     FUNCTION: BOUNCE THE SCROLLY MESSAGE.
  305.  
  306. bounce:
  307.     cmp.l    #60,ycord
  308.     beq.s    up
  309.     add.l    #1,ycord
  310.     sub.b    #1,deltay
  311.     rts
  312. up: cmp.l    #60,ycordminus
  313.     beq.s    rst_cord
  314.     add.l    #1,ycordminus
  315.     add.b    #1,deltay
  316.     rts
  317. rst_cord:
  318.     clr.l    ycord
  319.     clr.l    ycordminus
  320.     rts
  321.     
  322. ycord:        dc.l    0
  323. ycordminus:    dc.l    0
  324.     even
  325.  
  326.  
  327. ; ** THIS CRAPPY CODE BOUNCES SCROLLY MESSAGE NUMBER ONE (ONE AT THE TOP) **
  328. ;
  329. ;     ENTRYS  : YCORD2-HOW FAR UP AND DOWN SCREEN TO GO.
  330. ;             : DELTAY2-WAIT COMMAND IN COPPERLIST.
  331. ;     FUNCTION: BOUNCE THE SCROLLY MESSAGE.
  332.  
  333. bounce2:
  334.     cmp.l    #60,ycord2
  335.     beq.s    up2
  336.     add.l    #1,ycord2
  337.     add.b    #1,deltay2
  338.     rts
  339. up2:cmp.l    #60,ycordminus2
  340.     beq.s    rst_cord2
  341.     add.l    #1,ycordminus2
  342.     sub.b    #1,deltay2
  343.     rts
  344. rst_cord2:
  345.     clr.l    ycord2
  346.     clr.l    ycordminus2
  347.     rts
  348.     
  349. ycord2:        dc.l    0
  350. ycordminus2:dc.l    0
  351.     even
  352.  
  353.  
  354. ; ** CHARACTER DECODER ROUTINE **
  355.  
  356. text:
  357.     move.l    acurent,a2                Get message
  358.     clr.l    d1                        
  359.     move.b    (a2)+,d1                Update it
  360.     move.b    d1,letter                Store in offset
  361.     cmp.b    #255,d1                    Check for end of message
  362.     beq.w    rst_text                If equal, then reset
  363.     cmp.b    #254,d1
  364.     beq        stop
  365.     sub.l    #32,d1                    Subract 32 (ie space)
  366.     asl        d1                        Times by 2 
  367.     move.l    a2,acurent                Update acurent
  368.     CMP.B    #"4",letter                Is letter "K" or larger
  369.     BPL.s    add_more                If larger then add on
  370.     rts                                Return
  371. add_more:
  372.     CMP.B    #"H",letter                Is letter "U" or larger
  373.     BPL.S    add_more2                If larger then add on
  374.     add.l    #40*15,d1                Get next line down (KLMNOPQRST)
  375.     rts
  376. add_more2:                    
  377.     add.l    #40*30,d1                Get next line down (UVWXYZ0123)
  378.     rts
  379. rst_text:
  380.     move.l    #0,d1
  381.     move.l    #message,d2                Get begining of text
  382.     move.l    d2,acurent                Reset to begining
  383.     rts                                Return
  384. stop:
  385.     move.l    #0,d1
  386.     add.l    #1,acurent
  387.     move.l    #150,stopper
  388.     rts
  389.  
  390. ; ** CHARACTER DECODER ROUTINE NUMBER TWO ! **
  391.  
  392. text2:
  393.     move.l    acurent2,a2                
  394.     clr.l    d1                        
  395.     move.b    (a2)+,d1                
  396.     move.b    d1,letter2                
  397.     cmp.b    #255,d1                    
  398.     beq.w    rst_text2                
  399.     cmp.b    #254,d1
  400.     beq        stop2
  401.     sub.l    #32,d1                    
  402.     asl        d1                        
  403.     move.l    a2,acurent2                
  404.     CMP.B    #"4",letter2            
  405.     BPL.s    add_more20                
  406.     rts                                
  407. add_more20:
  408.     CMP.B    #"H",letter2            
  409.     BPL.S    add_more30                
  410.     add.l    #40*15,d1                
  411.     rts
  412. add_more30:                    
  413.     add.l    #40*30,d1                
  414.     rts
  415. rst_text2:
  416.     move.l    #0,d1
  417.     move.l    #message2,d2            
  418.     move.l    d2,acurent2                
  419.     rts                                
  420. stop2:
  421.     move.l    #0,d1
  422.     add.l    #1,acurent2
  423.     move.l    #150,stopper2
  424.     rts
  425.  
  426.  
  427. ; ** THE FIRST MESSAGE **
  428.  
  429. message:
  430. ; 254=STOP,255=END.
  431.     DC.B    " INTRO CODED BY TANGO     "
  432.     DC.B    "    CRYPTIC UK     ",254
  433.     DC.B    255
  434.     EVEN
  435.  
  436.  
  437. ; ** THE SECOND MESSAGE **
  438.  
  439. message2:
  440. ; 254=STOP,255=END.
  441.     DC.B    " INTRO CODED BY TANGO     "
  442.     DC.B    "    CRYPTIC UK     ",254
  443.     DC.B    "  THIS IS SCROLLER 2 AND ITS BLITSHIFTED"
  444.     DC.B    " IT ALSO HAS THE ABILITY TO.....   "
  445.     DC.B    "       STOP !      ",254   
  446.     DC.B    255
  447.     EVEN
  448.             
  449.  
  450. ;                **********************************************
  451. ;                ** THE MUZAX PLAY ROUTINE FOR NOISE TRACKER ** 
  452. ;                  ******************************************
  453.  
  454.  
  455. MUZAX:
  456.  
  457.     jsr    CYB_init
  458.  
  459. end:    rts
  460. CYB_init:lea    CYB_data,a0
  461.     add.l    #$03b8,a0
  462.     moveq    #$7f,d0
  463.     moveq    #0,d1
  464. CYB_init1:
  465.     move.l    d1,d2
  466.     subq.w    #1,d0
  467. CYB_init2:
  468.     move.b    (a0)+,d1
  469.     cmp.b    d2,d1
  470.     bgt.s    CYB_init1
  471.     dbf    d0,CYB_init2
  472.     addq.b    #1,d2
  473. CYB_init3:
  474.     lea    CYB_data,a0
  475.     lea    CYB_sample1(pc),a1
  476.     asl.l    #8,d2
  477.     asl.l    #2,d2
  478.     add.l    #$438,d2
  479.     add.l    a0,d2
  480.     moveq    #$1e,d0
  481. CYB_init4:
  482.     move.l    d2,(a1)+
  483.     moveq    #0,d1
  484.     move.w    42(a0),d1
  485.     asl.l    #1,d1
  486.     add.l    d1,d2
  487.     add.l    #$1e,a0
  488.     dbf    d0,CYB_init4
  489.     lea    CYB_sample1(PC),a0
  490.     moveq    #0,d0
  491. CYB_clear:
  492.     move.l    (a0,d0.w),a1
  493.     clr.l    (a1)
  494.     addq.w    #4,d0
  495.     cmp.w    #$7c,d0
  496.     bne.s    CYB_clear
  497.     clr.w    $dff0a8
  498.     clr.w    $dff0b8
  499.     clr.w    $dff0c8
  500.     clr.w    $dff0d8
  501.     clr.l    CYB_partnrplay
  502.     clr.l    CYB_partnote
  503.     clr.l    CYB_partpoint
  504.     move.b    CYB_data+$3b6,CYB_maxpart+1
  505.     rts
  506.     rts
  507. CYB_music:
  508.     addq.w    #1,CYB_counter
  509. CYB_cool:cmp.w    #6,CYB_counter
  510.     bne.s    CYB_notsix
  511.     clr.w    CYB_counter
  512.     bra    CYB_rout2
  513. CYB_notsix:
  514.     lea    CYB_aud1temp(PC),a6
  515.     tst.b    3(a6)
  516.     beq.s    CYB_arp1
  517.     lea    $dff0a0,a5        
  518.     bsr.s    CYB_arprout
  519. CYB_arp1:lea    CYB_aud2temp(PC),a6
  520.     tst.b    3(a6)
  521.     beq.s    CYB_arp2
  522.     lea    $dff0b0,a5
  523.     bsr.s    CYB_arprout
  524. CYB_arp2:lea    CYB_aud3temp(PC),a6
  525.     tst.b    3(a6)
  526.     beq.s    CYB_arp3
  527.     lea    $dff0c0,a5
  528.     bsr.s    CYB_arprout
  529. CYB_arp3:lea    CYB_aud4temp(PC),a6
  530.     tst.b    3(a6)
  531.     beq.s    CYB_arp4
  532.     lea    $dff0d0,a5
  533.     bra.s    CYB_arprout
  534. CYB_arp4:    rts
  535. CYB_arprout:
  536.     move.b    2(a6),d0
  537.     and.b    #$0f,d0
  538.     tst.b    d0
  539.     beq    CYB_arpegrt
  540.     cmp.b    #$01,d0
  541.     beq.s    CYB_portup
  542.     cmp.b    #$02,d0
  543.     beq.s    CYB_portdwn
  544.     cmp.b    #$0a,d0
  545.     beq.s    CYB_volslide
  546.     rts
  547. CYB_portup:
  548.     moveq    #0,d0
  549.     move.b    3(a6),d0
  550.     sub.w    d0,22(a6)
  551.     cmp.w    #$71,22(a6)
  552.     bpl.s    CYB_ok1
  553.     move.w    #$71,22(a6)
  554. CYB_ok1:    move.w    22(a6),6(a5)
  555.     rts
  556. CYB_portdwn:
  557.     moveq    #0,d0
  558.     move.b    3(a6),d0
  559.     add.w    d0,22(a6)
  560.     cmp.w    #$538,22(a6)
  561.     bmi.s    CYB_ok2
  562.     move.w    #$538,22(a6)
  563. CYB_ok2:    move.w    22(a6),6(a5)
  564.     rts
  565. CYB_volslide:
  566.     moveq    #0,d0
  567.     move.b    3(a6),d0
  568.     lsr.b    #4,d0
  569.     tst.b    d0
  570.     beq.s    CYB_voldwn
  571.     add.w    d0,18(a6)
  572.     cmp.w    #64,18(a6)
  573.     bmi.s    CYB_ok3
  574.     move.w    #64,18(a6)
  575. CYB_ok3:    move.w    18(a6),8(a5)
  576.     rts
  577. CYB_voldwn:
  578.     moveq    #0,d0
  579.     move.b    3(a6),d0
  580.     and.b    #$0f,d0
  581.     sub.w    d0,18(a6)
  582.     bpl.s    CYB_ok4
  583.     clr.w    18(a6)
  584. CYB_ok4:    move.w    18(a6),8(a5)
  585.     rts
  586. CYB_arpegrt:
  587.     move.w    CYB_counter(PC),d0
  588.     cmp.w    #1,d0
  589.     beq.s    CYB_loop2
  590.     cmp.w    #2,d0
  591.     beq.s    CYB_loop3
  592.     cmp.w    #3,d0
  593.     beq.s    CYB_loop4
  594.     cmp.w    #4,d0
  595.     beq.s    CYB_loop2
  596.     cmp.w    #5,d0
  597.     beq.s    CYB_loop3
  598.     rts
  599. CYB_loop2:
  600.     moveq    #0,d0
  601.     move.b    3(a6),d0
  602.     lsr.b    #4,d0
  603.     bra.s    CYB_cont
  604. CYB_loop3:
  605.     moveq    #$00,d0
  606.     move.b    3(a6),d0
  607.     and.b    #$0f,d0
  608.     bra.s    CYB_cont
  609. CYB_loop4:
  610.     move.w    16(a6),d2
  611.     bra.s    CYB_endpart
  612. CYB_cont:
  613.     add.w    d0,d0
  614.     moveq    #0,d1
  615.     move.w    16(a6),d1
  616.     and.w    #$fff,d1
  617.     lea    CYB_arpeggio(PC),a0
  618. CYB_loop5:
  619.     move.w    (a0,d0),d2
  620.     cmp.w    (a0),d1
  621.     beq.s    CYB_endpart
  622.     addq.l    #2,a0
  623.     bra.s    CYB_loop5
  624. CYB_endpart:
  625.     move.w    d2,6(a5)
  626.     rts
  627. CYB_rout2:
  628.     lea    CYB_data,a0
  629.     move.l    a0,a3
  630.     add.l    #$0c,a3
  631.     move.l    a0,a2
  632.     add.l    #$3b8,a2
  633.     add.l    #$43c,a0
  634.     move.l    CYB_partnrplay(PC),d0
  635.     moveq    #0,d1
  636.     move.b    (a2,d0),d1
  637.     asl.l    #8,d1
  638.     asl.l    #2,d1
  639.     add.l    CYB_partnote(PC),d1
  640.     move.l    d1,CYB_partpoint
  641.     clr.w    CYB_dmacon
  642.     lea    $dff0a0,a5
  643.     lea    CYB_aud1temp(PC),a6
  644.     bsr    CYB_playit
  645.     lea    $dff0b0,a5
  646.     lea    CYB_aud2temp(PC),a6
  647.     bsr    CYB_playit
  648.     lea    $dff0c0,a5
  649.     lea    CYB_aud3temp(PC),a6
  650.     bsr    CYB_playit
  651.     lea    $dff0d0,a5
  652.     lea    CYB_aud4temp(PC),a6
  653.     bsr    CYB_playit
  654.     move.w    #$01f4,d0
  655. CYB_rls:    dbf    d0,CYB_rls
  656.     move.w    #$8000,d0
  657.     or.w    CYB_dmacon,d0
  658.     move.w    d0,$dff096
  659.     lea    CYB_aud4temp(PC),a6
  660.     cmp.w    #1,14(a6)
  661.     bne.s    CYB_voice3
  662.     move.l    10(a6),$dff0d0
  663.     move.w    #1,$dff0d4
  664. CYB_voice3:
  665.     
  666.     lea    CYB_aud3temp(PC),a6
  667.     cmp.w    #1,14(a6)
  668.     bne.s    CYB_voice2
  669.     move.w    #1,$dff0c4
  670. CYB_voice2:
  671.     
  672.     lea    CYB_aud2temp(PC),a6
  673.     cmp.w    #1,14(a6)
  674.     bne.s    CYB_voice1
  675.     move.l    10(a6),$dff0b0
  676.     move.w    #1,$dff0b4
  677. CYB_voice1:
  678.     lea    CYB_aud1temp(PC),a6
  679.     cmp.w    #1,14(a6)
  680.     bne.s    CYB_voice0
  681.     move.l    10(a6),$dff0a0
  682.     move.w    #1,$dff0a4
  683. CYB_voice0:
  684.     move.l    CYB_partnote(PC),d0
  685.     add.l    #$10,d0
  686.     move.l    d0,CYB_partnote
  687.     cmp.l    #$400,d0
  688.     bne.s    CYB_stop
  689. CYB_higher:
  690.     clr.l    CYB_partnote
  691.     addq.l    #1,CYB_partnrplay
  692.     moveq    #0,d0
  693.     move.w    CYB_maxpart(PC),d0
  694.     move.l    CYB_partnrplay(PC),d1
  695.     cmp.l    d0,d1
  696.     bne.s    CYB_stop
  697.     clr.l    CYB_partnrplay
  698.     ;st    Pflag
  699. CYB_stop:tst.w    CYB_status
  700.     beq.s    CYB_stop2
  701.     clr.w    CYB_status
  702.     bra.s    CYB_higher
  703. CYB_stop2:
  704.     rts
  705. CYB_playit:
  706.     
  707.     move.l    (a0,d1.l),(a6)
  708.     addq.l    #4,d1
  709.     moveq    #0,d2
  710.     move.b    2(a6),d2
  711.     and.b    #$f0,d2
  712.     lsr.b    #4,d2
  713.     move.b    (a6),d0
  714.     and.b    #$f0,d0
  715.     or.b    d0,d2
  716.     tst.b    d2
  717.     beq.s    CYB_nosamplechange
  718.     moveq    #0,d3
  719.     lea    CYB_samples(PC),a1
  720.     move.l    d2,d4
  721.     asl.l    #2,d2
  722.     mulu    #$1e,d4
  723.     move.l    (a1,d2),4(a6)
  724.     move.w    (a3,d4.l),8(a6)
  725.     move.w    2(a3,d4.l),18(a6)
  726.     move.w    4(a3,d4.l),d3
  727.     tst.w    d3
  728.     beq.s    CYB_displace
  729.     move.l    4(a6),d2
  730.     add.l    d3,d2
  731.     move.l    d2,4(a6)
  732.     move.l    d2,10(a6)
  733.     move.w    6(a3,d4.l),8(a6)
  734.     move.w    6(a3,d4.l),14(a6)
  735.     move.w    18(a6),8(a5)
  736.     bra.s    CYB_nosamplechange
  737. CYB_displace:
  738.     move.l    4(a6),d2
  739.     add.l    d3,d2
  740.     move.l    d2,10(a6)
  741.     move.w    6(a3,d4.l),14(a6)
  742.     move.w    18(a6),8(a5)
  743. CYB_nosamplechange:
  744.     move.w    (a6),d0
  745.     and.w    #$fff,d0
  746.     tst.w    d0
  747.     beq.s    CYB_retrout
  748.     move.w    (a6),16(a6)
  749.     move.w    20(a6),$dff096
  750.     move.l    4(a6),(a5)
  751.     move.w    8(a6),4(a5)
  752.     move.w    (a6),d0
  753.     and.w    #$fff,d0
  754.     move.w    d0,6(a5)
  755.     move.w    20(a6),d0
  756.     or.w    d0,CYB_dmacon
  757. CYB_retrout:
  758.     tst.w    (a6)
  759.     beq.s    CYB_nonewper
  760.     move.w    (a6),22(a6)
  761. CYB_nonewper:
  762.     move.b    2(a6),d0
  763.     and.b    #$0f,d0
  764.     cmp.b    #$0b,d0
  765.     beq.s    CYB_posjmp
  766.     cmp.b    #$0c,d0
  767.     beq.s    CYB_setvol
  768.     cmp.b    #$0d,d0
  769.     beq.s    CYB_break
  770.     cmp.b    #$0e,d0
  771.     beq.s    CYB_setfil
  772.     cmp.b    #$0f,d0
  773.     beq.s    CYB_setspeed
  774.     rts
  775. CYB_posjmp:
  776.     not.w    CYB_status
  777.     moveq    #0,d0
  778.     move.b    3(a6),d0
  779.     subq.b    #1,d0
  780.     move.l    d0,CYB_partnrplay
  781.     rts
  782. CYB_setvol:
  783.     move.b    3(a6),8(a5)
  784.     rts
  785. CYB_break:
  786.     not.w    CYB_status
  787.     rts
  788. CYB_setfil:
  789.     moveq    #0,d0
  790.     move.b    3(a6),d0
  791.     and.b    #1,d0
  792.     rol.b    #1,d0
  793.     and.b    #$fd,$bfe001
  794.     or.b    d0,$bfe001
  795.     rts
  796. CYB_setspeed:
  797.     move.b    3(a6),d0
  798.     and.b    #$0f,d0
  799.     beq.s    CYB_back
  800.     clr.w    CYB_counter
  801.     move.b    d0,CYB_cool+3
  802. CYB_back:    rts
  803. CYB_aud1temp:
  804.     dcb.w    10,0
  805.     dc.w    1
  806.     dcb.w    2,0
  807. CYB_aud2temp:
  808.     dcb.w    10,0
  809.     dc.w    2
  810.     dcb.w    2,0
  811. CYB_aud3temp:
  812.     dcb.w    10,0
  813.     dc.w    4
  814.     dcb.w    2,0
  815. CYB_aud4temp:
  816.     dcb.w    10,0
  817.     dc.w    8
  818.     dcb.w    2,0
  819. CYB_partnote:    dc.l    0
  820. CYB_partnrplay:    dc.l    0
  821. CYB_counter:    dc.w    0
  822. CYB_partpoint:    dc.l    0
  823. CYB_samples:    dc.l    0
  824. CYB_sample1:    dcb.l    31,0
  825. CYB_maxpart:    dc.w    0
  826. CYB_dmacon:    dc.w    0
  827. CYB_status:    dc.w    0
  828. CYB_arpeggio:
  829.     dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c
  830.     dc.w $023a,$021a,$01fc,$01e0,$01c5,$01ac,$0194,$017d
  831.     dc.w $0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0
  832.     dc.w $00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097
  833.     dc.w $008f,$0087,$007f,$0078,$0071,$0000,$0000,$0000
  834.  
  835.  
  836.  
  837.  
  838. ; ** THE COPPERLIST **
  839.  
  840. OURCOPPER:
  841.         dc.w    $120,0
  842.         dc.w    $122,0
  843.         dc.w    bpl1mod,0,bpl2mod,0
  844.         dc.w    diwstrt,$2c81+16,diwstop,$2cc1
  845.         dc.w    bplcon0,$6600,bplcon1,$0000
  846.         dc.w    ddfstrt,$38,ddfstop,$d0
  847.         dc.w    color00,$000,color01,$000
  848.         dc.w    color09,$fff
  849.         DC.W    COLOR02,$fff,COLOR03,$F00,COLOR04,$E00,COLOR05,$00F
  850.         DC.W    COLOR06,$EA0,COLOR07,$080
  851.         DC.W    COLOR10,$DDD,COLOR11,$CCC,COLOR08,$000
  852.         DC.W    COLOR12,$0F0,COLOR13,$123,COLOR14,$321,COLOR15,$04F
  853. bp2lo:    dc.w    bpl2ptl,$0000
  854. bp2hi:    dc.w    bpl2pth,$0000
  855. bp4lo:    dc.w    bpl4ptl,$0000
  856. bp4hi:    dc.w    bpl4pth,$0000
  857. bp6lo:    dc.w    bpl6ptl,$0000
  858. bp6hi:    dc.w    bpl6pth,$0000
  859. deltay2:wait    $3009,$fffe
  860.         dc.w    color01,$00F
  861. bp1lo:    dc.w    bpl1ptl,$0000
  862. bp1hi:    dc.w    bpl1pth,$0000
  863. bp3lo:    dc.w    bpl3ptl,$0000
  864. bp3hi:    dc.w    bpl3pth,$0000
  865. bp5lo:    dc.w    bpl5ptl,$0000
  866. bp5hi:    dc.w    bpl5pth,$0000
  867. deltay:    wait    $c009,$fffe
  868. abp1lo:    dc.w    bpl1ptl,$0000
  869. abp1hi:    dc.w    bpl1pth,$0000
  870. abp3lo:    dc.w    bpl3ptl,$0000
  871. abp3hi:    dc.w    bpl3pth,$0000
  872. abp5lo:    dc.w    bpl5ptl,$0000
  873. abp5hi:    dc.w    bpl5pth,$0000
  874.         end_copper
  875.         
  876.  
  877. ;LOCAL CONSTANTS
  878.  
  879. WBCOPPER:        DC.L    0
  880. GFXLIB:            DC.B     "graphics.library",0
  881. GFXBASE:        DC.L    0
  882. systemints:        dc.l    0
  883. scroll_offset:    dc.l    0
  884. screenx:        dc.l    picture
  885. screeny:        dc.l    picture2
  886. letter:            dc.b    0
  887. letter2:        dc.b    0
  888. acurent:        dc.l    message
  889. acurent2:        dc.l    message2
  890. val:            dc.l    0
  891. val2:            dc.l    0
  892. stopper:        dc.l    0
  893. stopper2:        dc.l    0
  894.  
  895.  
  896. ;BINARY FILES TO BE INCLUDED
  897.     EVEN
  898. picture    
  899.     dcb.b    6000*3,0
  900. picture2:
  901.     dcb.b    10000*3,0
  902. font
  903.     incbin    df1:neatfont2.bin
  904. PLAY2:
  905.     INCBIN    DF1:PIC.IFF
  906. cyb_data:
  907.     incbin    df1:mod.count
  908.  
  909.  
  910.  
  911.  
  912.  
  913.     
  914.     
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.     
  923.     
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.  
  932.